using System;
using EPiServer.Common;
using EPiServer.Common.Attributes;
using EPiServer.Common.Attributes.DataTypes;

namespace EPiAbstractions.Common.Attributes
{
    public interface IAttributeHandlerFacade
    {
        IAttribute GetAttribute(Int32 id);

        AttributeCollection GetAttributes(Type type);

        AttributeCollection GetAttributes(IAttributeExtendableEntity entity);

        AttributeCollection GetAttributes(IAttributeExtendableEntity entity, ISite site);

        AttributeValueChoiceCollection GetAttributeValueChoices(IAttribute attribute);

        IAttribute AddAttribute(IAttribute attrib);

        void UpdateAttribute(IAttribute attrib);

        void RemoveAttribute(IAttribute attrib);

        IAttributeDataTypeProvider GetDataTypeProvider(Type complexType);

        event EPiServerCommonEventHandler AttributeAdded;

        event EPiServerCommonEventHandler AttributeUpdated;

        event EPiServerCommonEventHandler AttributeRemoved;
    }
}